// 给数组每个数据计算百分比，并确保最终的百分比加起来等于100
export function calcPercent(arr: any[], valueKey: string, fixed: number, percentKey = 'percent') {
  const total = arr.reduce((pre, cur) => pre + cur[valueKey], 0);

  // 如果总和为0，直接返回0的百分比
  if (total === 0) {
    arr.forEach((item) => {
      item[percentKey] = 0;
    });
    return arr;
  }

  // 放大倍数
  const scale = Math.pow(10, fixed);

  let remaining = 100 * scale;
  const result = arr.map((item) => {
    const value = item[valueKey];
    const percent = Math.floor((value / total) * 100 * scale);
    remaining -= percent;
    return {
      ...item,
      [percentKey]: percent,
    };
  });

  // 分配剩余的百分比（直接给第一个）
  result[0][percentKey] += remaining;

  // 转为浮点数
  result.forEach((item) => {
    item[percentKey] = (item[percentKey] / scale).toFixed(fixed);
  });

  return result;
}
